#ifndef NANE_IWINDOWSYSTEM_H
#   define NANE_IWINDOWSYSTEM_H

#   include "nane/core/ISubSystem.h"
#   include "nane/core/types.h"

namespace nane
{
    struct IWindowMessageHandler
    {
        virtual void OnClose() = 0;
    };

    struct IWindow
    {
        typedef void* OSHandle;
        virtual OSHandle GetOSHandle() = 0;
        virtual void Show() = 0;
        virtual void UpdateMessages() = 0;
        virtual void SetMessageHandler( IWindowMessageHandler* _handler ) = 0;
    };

    struct IWindowSystem
        : public ISubSystem
    {
        virtual IWindow* CreateWindow( const char* _title, uint32 _width, uint32 _height, uint32 _posX, uint32 _posY ) = 0;
        virtual void ReleaseWindow( IWindow* _window ) = 0;
        virtual uint32 GetScreenWidth() = 0;
        virtual uint32 GetScreenHeight() = 0;
    };
}   // namespace nane

#endif // NANE_IWINDOWSYSTEM_H
